;9-4.asm  在屏幕的右上角显示日期和时间。
include 9004.mac					;调入宏库
.model small
.data
letter1 db 'Date and week=  ','$' 
letter2 db 'Time=  ','$'
nears  dw ?
month db ?		
day db ?
week db ?
hour db ?
minutes db ?
seconds db ?
persec db ?
.code
start:
mov ax,@data			
mov ds,ax
clearsc							;清屏
cursor  2,50					;置光标
mov ah,9
mov dx,offset letter1			;显示字符串1
int 21h
;读日期并显示
mov ah,2ah						;CX=年，DH=月，DL=日，AL=星期
int 21h
mov nears,cx
mov month,dh
mov day,dl
mov week,al
;调用2-10显示子程序
mov bx,nears
call disp_2_10					;年
displ '/'						;显示/
mov bx,0
mov bl,month
call disp_2_10					;月
displ '/'						;显示/
mov bx,0
mov bl,day
call disp_2_10					;日
displ '/'						;显示/
mov bx,0
mov bl,week
call disp_2_10					;星期
enter							;回车换行
cursor  3,50					;置光标
mov ah,9
mov dx,offset letter2			;显示字符串2
int 21h
;读时间
mov ah,2ch						;CH=小时，CL=分，DH=秒，DL=百分秒
int 21h
mov hour,ch
mov minutes,cl
mov seconds,dh
mov persec,dl
;调用disp_2_10显示子程序
mov bx,0
mov bl,hour
call disp_2_10					;小时
displ ':'						;显示:
mov bx,0
mov bl,minutes
call disp_2_10					;分
displ ':'						;显示:
mov bx,0
mov bl,seconds
call disp_2_10					;秒
displ ':'						;显示:
mov bx,0
mov bl,persec
call disp_2_10					;百分秒
out1:
mov ah,4ch
int 21h
;子程序。二进制-十进制数显示。对bx值，显示十进制结果。
disp_2_10 proc 
store_ss						;保护现场
mov ax,bx						;bx传参
mov cx,0
mov bx,10						;将ax变为十进制数
let1:
mov dx,0
inc cx							;统计余数个数
idiv bx							;除以10，商在AX，余数在DX
push dx							;保存余数
cmp ax,0
jnz let1
let2:							;显示结果
pop ax							;将余数弹入ax
add ax,0030h					;调整为ASCII码
mov dl,al
mov ah,2						;显示余数
int 21h
loop let2
restore_ss						;恢复现场
ret
disp_2_10 endp
end start
